package com.emspost.utils;

import com.emspost.enums.RiskChainTypeEnum;

import java.util.regex.Pattern;

public class EventValidator {
    // 定义正则表达式常量
    private static final String EVENT_REGEX = "^EV#\\d+$";
    private static final String DECISION_REGEX = "^DC#\\d+$";
    private static final String STRATEGY_REGEX = "^ST#\\d+@\\d+$";
    
    // 定义事件类型枚举
    public enum EventType {
        // 事件类型：EV# + 数字
        EVENT,
        // 决策类型：DC# + 数字
        DECISION,
        // 策略类型：ST# + 数字 + @ + 数字
        STRATEGY
    }
    
    /**
     * 验证字符串是否符合指定事件类型的格式
     * 
     * @param input 要验证的字符串
     * @param type 事件类型 (EVENT, DECISION, STRATEGY)
     * @return 验证结果：true-符合格式，false-不符合格式
     */
    public static boolean validate(String input, EventType type) {
        if (input == null || input.isEmpty()) {
            return false;
        }
        
        switch (type) {
            case EVENT:
                return Pattern.matches(EVENT_REGEX, input);
            case DECISION:
                return Pattern.matches(DECISION_REGEX, input);
            case STRATEGY:
                return Pattern.matches(STRATEGY_REGEX, input);
            default:
                throw new IllegalArgumentException("未知的事件类型: " + type);
        }
    }
    
    /**
     * 获取指定事件类型的正则表达式
     * 
     * @param type 事件类型
     * @return 对应的正则表达式字符串
     */
    public static String getRegexPattern(EventType type) {
        switch (type) {
            case EVENT: return EVENT_REGEX;
            case DECISION: return DECISION_REGEX;
            case STRATEGY: return STRATEGY_REGEX;
            default: throw new IllegalArgumentException("未知的事件类型: " + type);
        }
    }
    
    /**
     * 获取指定事件类型的格式描述
     * 
     * @param type 事件类型
     * @return 格式描述字符串
     */
    public static String getFormatDescription(EventType type) {
        switch (type) {
            case EVENT: return "EV#事件ID (例如: EV#123)";
            case DECISION: return "DC#决策ID (例如: DC#456)";
            case STRATEGY: return "ST#决策ID@策略ID (例如: ST#789@012)";
            default: throw new IllegalArgumentException("未知的事件类型: " + type);
        }
    }

    public static void main(String[] args) {
        System.out.println(EventValidator.validate("ST#@777", "STRATEGY"));
    }

    /**
     * 验证字符串是否符合指定事件类型的格式
     *
     * @param code 要验证的字符串
     * @param type 事件类型 (EVENT, DECISION, STRATEGY)
     * @return 验证结果：true-符合格式，false-不符合格式
     */
    public static boolean validate(String code, String type) {
        if (code == null || code.isEmpty()) {
            return false;
        }

        switch (RiskChainTypeEnum.valueOf(type)) {
            case EVENT:
                return Pattern.matches(EVENT_REGEX, code);
            case DECISION:
                return Pattern.matches(DECISION_REGEX, code);
            case STRATEGY:
                return Pattern.matches(STRATEGY_REGEX, code);
            default:
                return false;
        }
    }
}